package yl.hs.bmipfull.service.production;

import yl.hs.bmipfull.pojo.production.ProductionDataTagEntity;
import yl.hs.bmipfull.pojo.production.ProductionLineEntity;
import yl.hs.bmipfull.pojo.production.ProductionTaskEntity;
import yl.hs.bmipfull.pojo.production.ProductionTaskExtendInfoEntity;
import yl.hs.bmipfull.service.IBaseService;
import yl.hs.bmipfull.viewmodels.PageQuery;
import yl.hs.bmipfull.viewmodels.PageResult;

import java.util.List;
import java.util.Map;

/**
 * 作用:  生产任务表服务层接口<br/>
 * 创建时间: 2021年05月26日 11时23分11秒 <br/>
 *
 * @author 张凯
 */

public interface IProductionTaskService extends IBaseService {

    /**
     * 查询生产任务表信息
     *
     * @param pageQuery 查询条件 {@link PageQuery}
     * @param rowNum    每页条数
     * @param page      页码
     * @return 站内信息-List-SiteMessageMainEntity
     * @throws Exception 查询条件异常
     */
    PageResult<Map<String, Object>> queryPage(PageQuery pageQuery, int rowNum, int page) throws Exception;

    /**
     * 根据编号查询生产任务明细信息
     *
     * @param sn
     * @return
     */
    Map<String, Object> getTaskDetailBySN(String sn);


    /**
     * 根据生产任务表编号查询生产任务表信息
     *
     * @param sn 编号
     * @return 生产任务表-{@link ProductionTaskEntity}
     */
    Map<String,Object> findBySnToMap(String sn);

    /**
     * 根据生产任务表编号查询生产任务表信息
     *
     * @param sn 编号
     * @return 生产任务表-{@link ProductionTaskEntity}
     */
    ProductionTaskEntity findBySn(String sn);

    /**
     * 保存生产任务表信息
     *
     * @param model          生产任务表表单信息
     * @param sn             生产任务表信息原有编号
     * @param extandInfoList 拓展信息
     * @return 执行结果-受影响行数-Integer
     * @throws Exception 保存异常
     */
    Integer saveProductionTask(Map<String, Object> model, List<ProductionTaskExtendInfoEntity> extandInfoList, String sn) throws Exception;

    /**
     * 根据生产任务表编号删除生产任务表信息
     *
     * @param sn 生产任务表编号
     * @return 影响行数
     */
    Integer delete(String[] sn);

    /**
     * 根据数据编号获取数据关联标签
     *
     * @param sn 数据编号
     * @return 关联标签集合
     */
    List<ProductionDataTagEntity> queryAllTagsBySN(String sn);

    /**
     * 根据数据编号获取数据关联标签
     *
     * @param snList 数据编号集合
     * @return 关联标签集合
     */
    List<ProductionDataTagEntity> queryAllTagsBySNArray(List<String> snList);

    /**
     * 更新生产任务信息
     *
     * @param taskEntity 生产任务信息
     * @return 执行结果
     */
    Integer updateTask(ProductionTaskEntity taskEntity);

    /**
     * 查询生产任务中的生产任务
     *
     * @return
     */
    List<ProductionTaskEntity> queryTaskSc(String productCateSN);

    /**
     * 根据生产任务状态查询生产任务信息
     *
     * @param state 生产任务状态
     * @return
     */

    List<Map<String, Object>> getTaskByState(PageQuery pageQuery, short state);

    /**
     * 根据生产任务sn修改生产任务状态
     *
     * @param sn    生产任务sn
     * @param state 生产任务状态
     * @return
     */

    Integer updateTask(String sn, short state);

    /**
     * 更新生产任务写入状态为已写入
     * @param sn 生产任务SN
     * @return 写入结果
     */
    Integer updateTaskWrite(String sn);
    /**
     * 根据生产线编号获取 生产任务信息
     * @param line 生产线信息
     * @return 生产任务信息
     */
    List<ProductionTaskEntity> selectByLineSn(ProductionLineEntity line);
    /**
     * 根据传入参数模糊查询生产任务
     * @param Condition 条件字符串
     * @return 生产任务信息
     */
    List<ProductionTaskEntity> queryListByCondition(String catesn,String Condition);

    /**
     * 根据编号修改生产任务状态
     * @param snList 编号
     * @param state 状态
     * @return 受影响行数
     */
    Integer changeStateBySn(String[] snList,short state);
}